#include "NonlinearityBase.h"

#include "Utils.h"
#include <sstream>

// Przestrzeń nazw
namespace RafMat
{
namespace SimEngine
{

using namespace std;
using namespace SimInterface;

const std::string NonlinearityBase::CONF_TYPE = "type";

NonlinearityBase::NonlinearityBase(const SimInterface::ISimulator &isim, std::string type)
    : SISOModel(isim, "Nonlinearity"),
      m_type(type)
{
}

double NonlinearityBase::simulateStep(double sample)
{
    return this->simulateNonlinearityStep(sample);
}

/** Odczytuje parametr (\see IConfigurable::getParameter). */
std::string NonlinearityBase::getParameter(const std::string& param) const throw(std::logic_error)
{
    // Usuń ewentualne wiodące i końcowe spacje
    string tparam = Utils::trimWhiteSpaces(param);
    string outStr;

    // Strumień danych dla łańcucha argumentu.
    std::ostringstream ostr(outStr);

    if(tparam == CONF_TYPE)
    {
        ostr << m_type;
    }
    else
        throw iconf_error::unrecognizedParam(*this, tparam);

    return ostr.str();
}

SimFile::ConfigWriter& NonlinearityBase::dumpParameters(SimFile::ConfigWriter& o) const
{
    o.pushBlock(SimFile::ConfigWriter::BlockNonlinearity, getName());
    o.pushParam(CONF_TYPE, m_type);
    this->dumpSpecificPar(o);
    o.closeBlock();
    return o;
}


}
}
